As computing devices become increasingly prevalent, software companies are developing more and more products to address a vast number of business and leisure activities. Accordingly, software companies are competing for an expanding customer base in a wide range of product areas.
Many of these companies choose to make available trial versions of their applications. However, in providing a trial version, companies must take care that customers retain an incentive to purchase the retail product. As such, companies typically restrict trial versions in one of two ways: by limiting the trial version to a subset of the features available in the complete product, or by providing a full set of features, with some or all of the features licensed for only a limited trial period.
One common method of restricting access to trial software is to record the date that the product was installed, and to allow execution of the software for only a certain number of days following the installation date. For example, a 30-day limited trial version may be fully functional for 30 days following initial installation, but may require a retail product key after those 30 days. This protection scheme is often easily circumvented by setting back the system clock on the computing device so that the application cannot identify when the trial license has expired.
Alternatively, an application may store the amount of time elapsed since installation in a persistent store. For example, in a Microsoft® Windows environment (Microsoft® is a registered trademark of the Microsoft Corporation), a counter is retained in the registry, or in another file on the hard drive. The counter is updated as time elapses, regardless of the specific date. Thus, trial license expiration is associated with a particular state of the counter, rather than with a particular day.
As an alternative to the aforementioned licensing mechanisms, software companies may choose to restrict access to a trial or retail version of an application, or one of its components, based on a user's credentials. Authorizing a user's credentials may require developing code directed to native system resources.